import type { Question } from '@/types/exam';

/**
 * Java 8+ 新特性题目（初级10道 + 中级10道 + 高级10道）
 */
export const java8Questions: Question[] = [
	// ========== 初级题目（10道） ==========
	{
		id: 5001,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，Lambda表达式的语法格式是？',
		options: [
			{ key: 'A', text: '(参数) -> { 表达式 }' },
			{ key: 'B', text: 'function(参数) { 表达式 }' },
			{ key: 'C', text: '参数 => 表达式' },
			{ key: 'D', text: 'lambda 参数: 表达式' }
		],
		answer: ['A'],
		explanation: 'Java 8 Lambda表达式的语法是：(参数) -> { 表达式 }。如果只有一个参数可以省略括号，如果表达式只有一行可以省略大括号。'
	},
	{
		id: 5002,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，函数式接口的主要特点是？',
		options: [
			{ key: 'A', text: '可以有多个抽象方法' },
			{ key: 'B', text: '只能有一个抽象方法' },
			{ key: 'C', text: '不能有默认方法' },
			{ key: 'D', text: '不能有静态方法' }
		],
		answer: ['B'],
		explanation: '函数式接口（@FunctionalInterface）只能有一个抽象方法，但可以有多个默认方法和静态方法。Lambda表达式需要函数式接口。'
	},
	{
		id: 5003,
		techId: 'java',
		type: 'judge',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Stream API可以对集合进行并行操作。',
		options: [
			{ key: 'A', text: '正确' },
			{ key: 'B', text: '错误' }
		],
		answer: ['A'],
		explanation: 'Stream API支持并行操作，可以使用parallelStream()方法创建并行流，充分利用多核CPU提高性能。'
	},
	{
		id: 5004,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个是函数式接口？',
		options: [
			{ key: 'A', text: 'Function<T, R>' },
			{ key: 'B', text: 'Consumer<T>' },
			{ key: 'C', text: 'Predicate<T>' },
			{ key: 'D', text: '以上都是' }
		],
		answer: ['D'],
		explanation: 'Java 8提供了多个内置函数式接口：Function（函数）、Consumer（消费者）、Predicate（断言）、Supplier（供应者）等，都在java.util.function包中。'
	},
	{
		id: 5005,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，Optional类的主要作用是？',
		options: [
			{ key: 'A', text: '创建对象' },
			{ key: 'B', text: '避免空指针异常，优雅处理null值' },
			{ key: 'C', text: '提高性能' },
			{ key: 'D', text: '简化代码编译' }
		],
		answer: ['B'],
		explanation: 'Optional类用于表示可能为null的值，提供优雅的方式来处理null值，避免空指针异常。它鼓励更安全的编程实践。'
	},
	{
		id: 5006,
		techId: 'java',
		type: 'judge',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，接口可以有默认方法和静态方法。',
		options: [
			{ key: 'A', text: '正确' },
			{ key: 'B', text: '错误' }
		],
		answer: ['A'],
		explanation: '从Java 8开始，接口可以有默认方法（default method）和静态方法（static method）。默认方法可以被实现类重写，静态方法只能通过接口名调用。'
	},
	{
		id: 5007,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，方法引用的语法格式是？',
		options: [
			{ key: 'A', text: '类名::方法名' },
			{ key: 'B', text: '类名.方法名()' },
			{ key: 'C', text: '类名->方法名' },
			{ key: 'D', text: '类名=>方法名' }
		],
		answer: ['A'],
		explanation: '方法引用的语法是：类名::方法名 或 对象::方法名。方法引用是Lambda表达式的简化形式，可以引用已有的方法。'
	},
	{
		id: 5008,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，新的日期时间API位于哪个包？',
		options: [
			{ key: 'A', text: 'java.util.Date' },
			{ key: 'B', text: 'java.time' },
			{ key: 'C', text: 'java.sql.Date' },
			{ key: 'D', text: 'java.calendar' }
		],
		answer: ['B'],
		explanation: 'Java 8引入了新的日期时间API，位于java.time包中，包括LocalDate、LocalTime、LocalDateTime、ZonedDateTime等类，解决了旧API的线程安全等问题。'
	},
	{
		id: 5009,
		techId: 'java',
		type: 'judge',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Stream API是惰性求值的，只有在终端操作时才会执行。',
		options: [
			{ key: 'A', text: '正确' },
			{ key: 'B', text: '错误' }
		],
		answer: ['A'],
		explanation: 'Stream API采用惰性求值（Lazy Evaluation），中间操作不会立即执行，只有在遇到终端操作（如collect、forEach）时才会执行整个流。'
	},
	{
		id: 5010,
		techId: 'java',
		type: 'single',
		difficulty: 'easy',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个是Stream的终端操作？',
		options: [
			{ key: 'A', text: 'filter()' },
			{ key: 'B', text: 'map()' },
			{ key: 'C', text: 'collect()' },
			{ key: 'D', text: 'sorted()' }
		],
		answer: ['C'],
		explanation: 'Stream的终端操作包括：collect、forEach、reduce、count、anyMatch、allMatch等。filter、map、sorted是中间操作，返回新的Stream。'
	},

	// ========== 中级题目（10道） ==========
	{
		id: 5011,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Stream的说法是正确的？',
		options: [
			{ key: 'A', text: 'Stream可以重复使用' },
			{ key: 'B', text: 'Stream只能使用一次' },
			{ key: 'C', text: 'Stream可以修改源数据' },
			{ key: 'D', text: 'Stream必须是有序的' }
		],
		answer: ['B'],
		explanation: 'Stream只能使用一次，执行终端操作后流就被消费了。Stream不会修改源数据，而是返回新的Stream。Stream可以是无序的。'
	},
	{
		id: 5012,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Lambda表达式的说法是错误的？',
		options: [
			{ key: 'A', text: 'Lambda表达式可以访问外部变量，但必须是final或effectively final' },
			{ key: 'B', text: 'Lambda表达式可以简化匿名内部类' },
			{ key: 'C', text: 'Lambda表达式可以修改外部变量' },
			{ key: 'D', text: 'Lambda表达式需要函数式接口' }
		],
		answer: ['C'],
		explanation: 'Lambda表达式可以访问外部变量，但必须是final或effectively final（实际上没有被修改的变量）。Lambda表达式不能修改外部变量。'
	},
	{
		id: 5013,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Optional的说法是正确的？',
		options: [
			{ key: 'A', text: 'Optional.of()可以接受null值' },
			{ key: 'B', text: 'Optional.ofNullable()可以接受null值' },
			{ key: 'C', text: 'Optional.get()可以安全获取null值' },
			{ key: 'D', text: 'Optional不需要判断isPresent()就可以get()' }
		],
		answer: ['B'],
		explanation: 'Optional.ofNullable()可以接受null值，返回空的Optional。Optional.of()不能接受null。Optional.get()前需要判断isPresent()，否则可能抛出NoSuchElementException。'
	},
	{
		id: 5014,
		techId: 'java',
		type: 'multiple',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: '以下哪些是Java 8 Stream的中间操作？',
		options: [
			{ key: 'A', text: 'filter()' },
			{ key: 'B', text: 'map()' },
			{ key: 'C', text: 'collect()' },
			{ key: 'D', text: 'sorted()' }
		],
		answer: ['A', 'B', 'D'],
		explanation: 'Stream的中间操作包括：filter（过滤）、map（映射）、sorted（排序）、distinct（去重）、limit（限制）、skip（跳过）等。collect()是终端操作。'
	},
	{
		id: 5015,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于接口默认方法的说法是正确的？',
		options: [
			{ key: 'A', text: '默认方法必须被实现类重写' },
			{ key: 'B', text: '默认方法可以被实现类重写，也可以不重写' },
			{ key: 'C', text: '默认方法不能有方法体' },
			{ key: 'D', text: '接口不能有多个默认方法' }
		],
		answer: ['B'],
		explanation: '接口默认方法有方法体，可以被实现类重写，也可以不重写直接使用。接口可以有多个默认方法。这是Java 8为了向后兼容而引入的特性。'
	},
	{
		id: 5016,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于方法引用的说法是正确的？',
		options: [
			{ key: 'A', text: '方法引用只能引用静态方法' },
			{ key: 'B', text: '方法引用可以引用静态方法、实例方法、构造方法' },
			{ key: 'C', text: '方法引用不能引用构造方法' },
			{ key: 'D', text: '方法引用只能引用无参方法' }
		],
		answer: ['B'],
		explanation: '方法引用可以引用：静态方法（类名::静态方法）、实例方法（对象::实例方法 或 类名::实例方法）、构造方法（类名::new）。'
	},
	{
		id: 5017,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，LocalDateTime的主要特点是？',
		options: [
			{ key: 'A', text: '线程安全且不可变' },
			{ key: 'B', text: '线程不安全' },
			{ key: 'C', text: '可以修改' },
			{ key: 'D', text: '包含时区信息' }
		],
		answer: ['A'],
		explanation: 'LocalDateTime是线程安全且不可变的，所有操作都返回新的对象。它不包含时区信息，如果需要时区信息，应该使用ZonedDateTime。'
	},
	{
		id: 5018,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于CompletableFuture的说法是正确的？',
		options: [
			{ key: 'A', text: 'CompletableFuture只能用于同步操作' },
			{ key: 'B', text: 'CompletableFuture支持异步编程和链式调用' },
			{ key: 'C', text: 'CompletableFuture不能组合多个异步任务' },
			{ key: 'D', text: 'CompletableFuture不支持异常处理' }
		],
		answer: ['B'],
		explanation: 'CompletableFuture是Java 8引入的异步编程工具，支持异步执行、链式调用、组合多个异步任务、异常处理等功能，比Future更强大。'
	},
	{
		id: 5019,
		techId: 'java',
		type: 'single',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Stream并行流的说法是正确的？',
		options: [
			{ key: 'A', text: '并行流总是比串行流快' },
			{ key: 'B', text: '并行流适合CPU密集型任务，但不一定总是更快' },
			{ key: 'C', text: '并行流不能使用forEach' },
			{ key: 'D', text: '并行流不能使用collect' }
		],
		answer: ['B'],
		explanation: '并行流适合CPU密集型任务，但对于IO密集型或小数据量任务，并行流的开销可能大于收益。并行流可以使用forEach和collect等终端操作。'
	},
	{
		id: 5020,
		techId: 'java',
		type: 'multiple',
		difficulty: 'medium',
		category: 'Java 8+ 新特性',
		question: '以下哪些是Java 8引入的新特性？',
		options: [
			{ key: 'A', text: 'Lambda表达式' },
			{ key: 'B', text: 'Stream API' },
			{ key: 'C', text: '新的日期时间API' },
			{ key: 'D', text: '接口默认方法' }
		],
		answer: ['A', 'B', 'C', 'D'],
		explanation: 'Java 8引入的主要特性包括：Lambda表达式、Stream API、新的日期时间API（java.time）、接口默认方法和静态方法、Optional类、方法引用、CompletableFuture等。'
	},

	// ========== 高级题目（10道） ==========
	{
		id: 5021,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Stream reduce操作的说法是正确的？',
		options: [
			{ key: 'A', text: 'reduce只能用于数字类型' },
			{ key: 'B', text: 'reduce可以将流中的元素组合成一个值' },
			{ key: 'C', text: 'reduce不能指定初始值' },
			{ key: 'D', text: 'reduce只能用于有序流' }
		],
		answer: ['B'],
		explanation: 'reduce操作可以将流中的元素组合成一个值，可以指定初始值（identity），也可以不指定。reduce适用于各种类型，不仅限于数字。'
	},
	{
		id: 5022,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Collectors的说法是错误的？',
		options: [
			{ key: 'A', text: 'Collectors.toList()可以将流收集为List' },
			{ key: 'B', text: 'Collectors.groupingBy()可以按条件分组' },
			{ key: 'C', text: 'Collectors只能用于List' },
			{ key: 'D', text: 'Collectors.partitioningBy()可以按条件分区' }
		],
		answer: ['C'],
		explanation: 'Collectors可以用于各种集合类型：toList()、toSet()、toMap()、groupingBy()（分组）、partitioningBy()（分区）、counting()、summingInt()等。'
	},
	{
		id: 5023,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于函数式接口的方法引用的说法是正确的？',
		options: [
			{ key: 'A', text: '方法引用不能替代Lambda表达式' },
			{ key: 'B', text: '方法引用可以替代Lambda表达式，代码更简洁' },
			{ key: 'C', text: '方法引用只能用于静态方法' },
			{ key: 'D', text: '方法引用性能不如Lambda表达式' }
		],
		answer: ['B'],
		explanation: '方法引用是Lambda表达式的简化形式，当Lambda表达式只是调用一个已存在的方法时，可以使用方法引用，代码更简洁易读。性能与Lambda相当。'
	},
	{
		id: 5024,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Stream flatMap的说法是正确的？',
		options: [
			{ key: 'A', text: 'flatMap只能用于嵌套集合' },
			{ key: 'B', text: 'flatMap可以将嵌套的Stream扁平化为单个Stream' },
			{ key: 'C', text: 'flatMap和map功能相同' },
			{ key: 'D', text: 'flatMap不能处理Optional' }
		],
		answer: ['B'],
		explanation: 'flatMap可以将嵌套的Stream扁平化为单个Stream，常用于处理嵌套集合。flatMap与map的区别是：map返回单个值，flatMap返回Stream。Optional也有flatMap方法。'
	},
	{
		id: 5025,
		techId: 'java',
		type: 'multiple',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: '以下哪些是Java 9+引入的新特性？',
		options: [
			{ key: 'A', text: '模块系统（Module System）' },
			{ key: 'B', text: '接口私有方法' },
			{ key: 'C', text: 'var关键字（局部变量类型推断）' },
			{ key: 'D', text: '文本块（Text Blocks）' }
		],
		answer: ['A', 'B'],
		explanation: 'Java 9引入模块系统和接口私有方法。var关键字是Java 10引入的，文本块（"""）是Java 13引入的。这些都属于Java 8+新特性范围。'
	},
	{
		id: 5026,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Stream短路操作的说法是正确的？',
		options: [
			{ key: 'A', text: '所有终端操作都是短路操作' },
			{ key: 'B', text: 'findFirst、findAny、anyMatch、allMatch等是短路操作' },
			{ key: 'C', text: '短路操作不会提高性能' },
			{ key: 'D', text: '短路操作必须处理所有元素' }
		],
		answer: ['B'],
		explanation: '短路操作（Short-circuit）在满足条件时立即停止处理，不需要处理所有元素。包括：findFirst、findAny、anyMatch、allMatch、noneMatch等。'
	},
	{
		id: 5027,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于Optional链式调用的说法是正确的？',
		options: [
			{ key: 'A', text: 'Optional只能使用get()方法' },
			{ key: 'B', text: 'Optional支持map、flatMap、filter等链式操作' },
			{ key: 'C', text: 'Optional不能处理null值' },
			{ key: 'D', text: 'Optional必须使用if-else判断' }
		],
		answer: ['B'],
		explanation: 'Optional支持链式操作：map（转换值）、flatMap（处理嵌套Optional）、filter（过滤）、orElse（提供默认值）、orElseGet（延迟提供默认值）等，使代码更优雅。'
	},
	{
		id: 5028,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于并行Stream的性能优化说法是错误的？',
		options: [
			{ key: 'A', text: '并行Stream适合大数据量' },
			{ key: 'B', text: '并行Stream总是比串行Stream快' },
			{ key: 'C', text: '并行Stream需要考虑线程安全' },
			{ key: 'D', text: '并行Stream的collect操作需要线程安全的收集器' }
		],
		answer: ['B'],
		explanation: '并行Stream不一定总是更快，需要考虑数据量、任务复杂度、线程开销等因素。并行Stream需要考虑线程安全，collect操作需要使用线程安全的收集器。'
	},
	{
		id: 5029,
		techId: 'java',
		type: 'single',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: 'Java 8中，以下哪个关于接口默认方法冲突的说法是正确的？',
		options: [
			{ key: 'A', text: '如果实现类实现多个接口，且这些接口有相同签名的默认方法，必须重写' },
			{ key: 'B', text: '接口默认方法冲突会自动解决' },
			{ key: 'C', text: '接口默认方法不能有冲突' },
			{ key: 'D', text: '接口默认方法冲突会被忽略' }
		],
		answer: ['A'],
		explanation: '如果实现类实现多个接口，且这些接口有相同签名的默认方法，实现类必须重写该方法，否则会编译错误。可以通过接口名.super.方法名()调用特定接口的默认方法。'
	},
	{
		id: 5030,
		techId: 'java',
		type: 'multiple',
		difficulty: 'hard',
		category: 'Java 8+ 新特性',
		question: '以下哪些是Java 8 Stream的特性？',
		options: [
			{ key: 'A', text: '惰性求值（Lazy Evaluation）' },
			{ key: 'B', text: '函数式编程风格' },
			{ key: 'C', text: '支持并行处理' },
			{ key: 'D', text: '不可变操作' }
		],
		answer: ['A', 'B', 'C', 'D'],
		explanation: 'Stream的特性包括：惰性求值（延迟执行）、函数式编程风格（链式调用、无副作用）、支持并行处理（parallelStream）、不可变操作（不修改源数据，返回新Stream）。'
	}
];

